﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using CapaEntidades;
using CapaNegocio;
using System.Web.Script.Serialization;


namespace CapaPresentacion
{
    /// <summary>
    /// Descripción breve de wsPedido
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // Para permitir que se llame a este servicio web desde un script, usando ASP.NET AJAX, quite la marca de comentario de la línea siguiente. 
    [System.Web.Script.Services.ScriptService]
    public class wsPedido : System.Web.Services.WebService
    {
        [WebMethod]
        public String spAlmacenClienteXNic(String prmNic)
        {
            List<enAlmacenCliente> lstAlmCliente = new List<enAlmacenCliente>();
            lstAlmCliente = neAlmacenCliente.spAlmacenClienteXNic(prmNic);
            var jsonSerialiser = new JavaScriptSerializer();
            var json = jsonSerialiser.Serialize(lstAlmCliente);
            return json;
        }

        [WebMethod]
        public List<enCliente> spClienteXRazonSocial(String prmRazSocial)
        {
            List<enCliente> lst = new List<enCliente>();                      
            try
            {
                List<enCliente>  lstAlmCliente = neCliente.Instancia.spClienteXRazonSocial(prmRazSocial);
                wsTCRef.wsCobranzasSoapClient service = new wsTCRef.wsCobranzasSoapClient();
                foreach (enCliente a in lstAlmCliente)
                {
                    enCliente p = new enCliente();
                    p = a;
                    p.lineaCredito = service.WS_lineaxCliente(a.cli_id);
                    p.deuda = service.WS_MontoDeuda(a.cli_id);
                    lst.Add(p);
                }                

            }
            catch (Exception)
            {

                throw;
            }

            return lst;
        }

        [WebMethod]
        public  String tipoDocumentoLista()
        {
            List<enTipoDocumento> lstTipDocumento = new  List<enTipoDocumento>();
            lstTipDocumento = neTipoDocumento.tipoDocumentoLista();
            var jsonSerialiser = new JavaScriptSerializer();
            var json = jsonSerialiser.Serialize(lstTipDocumento);
            return json;
        } 
        
        [WebMethod]
        public List<enModoPago> modoPagoLista()
        {
            List<enModoPago> lstModPago = new List<enModoPago>();
            lstModPago = neModoPago.modoPagoLista();
            return lstModPago;
        }
        
        [WebMethod]
       public String almacenLista() {
           try
           {
               List<enAlmacen> lstAlmacen = new List<enAlmacen>();
               lstAlmacen = neAlmacen.almacenLista();
               var jsonSerialiser = new JavaScriptSerializer();
               var json = jsonSerialiser.Serialize(lstAlmacen);
               return json;

           }
           catch (Exception)
           {
               
               throw;
           }
            
        }

        [WebMethod]
        public String spProductoBuscarXPresentacion(int idAlmacen,String prmPresentacion)
        {
            
                      
            try
               
            { var json = ""; 
                List<enProducto> lstProducto = new List<enProducto>();
                //lstProducto = neProducto.Instancia.spProductoBuscarXPresentacion(idAlmacen, prmPresentacion);
                List<enProducto> lst = neProducto.Instancia.spProductoBuscarXPresentacion(idAlmacen, prmPresentacion);
                wsLogisticaRef.Service1SoapClient service = new wsLogisticaRef.Service1SoapClient();
                foreach(enProducto a in lst){
                    enProducto p = new enProducto();
                    p = a;
                    p.stock = service.BuscarStock_VENTAS(Convert.ToInt64(a.pro_codigo), idAlmacen); ;
                    lstProducto.Add(p);
                }
                    var jsonSerialiser = new JavaScriptSerializer();
                    json = jsonSerialiser.Serialize(lstProducto);
                    return json;
            }
            catch (Exception)
            {

                throw;
            }

            
        }


        [WebMethod]
        public List<enProducto> spDetallePedido(int id, String uniMed, String presentacion, Double pre,int cantidad)
        {   List<enProducto> lstProducto = new List<enProducto>();
            try
            {
                
                enProducto producto = new enProducto();
                producto.pro_id = id;
                //enUnidadMedida un = new enUnidadMedida();
                //un.uniMed_descripcion = uniMed;
                //producto.unidadMedida = un;
                producto.pro_presentacion = presentacion;
                producto.cantidad = cantidad;
                Boolean val = true;
                lstProducto = (List<enProducto>)Session["detallePedido"];
                if (lstProducto != null)
                {
                    lstProducto = (List<enProducto>)Session["detallePedido"];

                    foreach (var enProducto in lstProducto)
                    {
                        if (enProducto.pro_id == id) {
                            val=false;
                        }
                    }                   
                }

                if (val)
                { 
                    lstProducto.Add(producto);
                }
                               
                Session["detallePedido"] = lstProducto;
                
            }
            catch (Exception x)
            {

                
            }
            return lstProducto;
        }

        //#################################conti
        [WebMethod(EnableSession = true)]
        public int agregarProducto(int id, String nom, Double pre, int can, double des)
        {
            try
            {
                List<enCotizacionDetalle> lstCot = new List<enCotizacionDetalle>();
                if (Session["cotizacion"] == null)
                {

                    enCotizacionDetalle cot = new enCotizacionDetalle();
                    enProducto producto = new enProducto();
                    producto.pro_id = id;
                    producto.pro_presentacion = nom;
                    cot.cotDet_precio = pre;
                    cot.cotDet_cantidad = can;
                    cot.cotDet_descuento = des;
                    cot.producto = producto;
                    lstCot.Add(cot);

                    //session["cotizacion"] = lstCot;
                }
                else
                {
                    lstCot = (List<enCotizacionDetalle>)Session["cotizacion"];
                    Boolean val = true;
                    foreach (var enCotizacionDetalle in lstCot)
                    {
                        if (enCotizacionDetalle.producto.pro_id == id)
                        {
                            val = false;
                        }
                    }                                     

                    if (val)
                    {
                        enCotizacionDetalle cot = new enCotizacionDetalle();
                        enProducto producto = new enProducto();
                        producto.pro_id = id;
                        producto.pro_presentacion = nom;
                        cot.cotDet_precio = pre;
                        cot.cotDet_cantidad = can;
                        cot.cotDet_descuento = des;
                        cot.producto = producto;
                        lstCot.Add(cot);
                    }

                }

                Session["cotizacion"] = lstCot;
            }
            catch (Exception e)
            {

                throw;
            }

            return 1;
        }

        public static  Double redondear(Double num) { 
            return Math.Round(num, 2);
        }

        [WebMethod(EnableSession = true)]
        public String listaDetalleProductos()
        {
            String json = "";
            if (Session["cotizacion"] != null)
            {
                List<enCotizacionDetalle> lstProducto = new List<enCotizacionDetalle>();
                lstProducto = (List<enCotizacionDetalle>)Session["cotizacion"];

                List<enCotizacionDetalle> lista = new List<enCotizacionDetalle>();
                Double igv = 0.0;
                Double subTotal = 0.0;
                Double total = 0.0;
                Double descuento = 0.0;
                Double importe = 0.0;
                foreach (var e in lstProducto)
                {
                    enCotizacionDetalle c = new enCotizacionDetalle();
                    enProducto p = new enProducto();
                    p.pro_id = e.producto.pro_id;
                    p.pro_presentacion = e.producto.pro_presentacion;
                    c.cotDet_precio = e.cotDet_precio;
                    c.cotDet_cantidad = e.cotDet_cantidad;
                    descuento = e.cotDet_descuento * e.cotDet_precio * e.cotDet_cantidad;
                    importe = e.cotDet_precio * e.cotDet_cantidad - descuento;
                    c.cotDet_descuento = redondear(descuento);
                    c.importe = redondear(importe);

                    subTotal = subTotal + importe;
                    igv = subTotal * 0.18;
                    total = subTotal - igv;

                    c.subTotal = redondear(subTotal);
                    c.total = redondear(total);
                    c.igvTotal = redondear(igv);
                    c.producto = p;
                    lista.Add(c);

                }

                var jsonSerialiser = new JavaScriptSerializer();
                json = jsonSerialiser.Serialize(lista);
            }
            return json;
        }

        [WebMethod]
        public String listaAutorizadores()
        {
            List<enPersonal> lstTipDocumento = new List<enPersonal>();
            lstTipDocumento = neUsuario.listaAutorizadores();
            var jsonSerialiser = new JavaScriptSerializer();
            var json = jsonSerialiser.Serialize(lstTipDocumento);
            return json;
        }

        [WebMethod]
        public String registrarPedido(int idCliente, int tipDocumento, int modoPago, String sucursalCliente, Double total,
            int idAutoAumento, int idPerAutoAumento, int idAutoPase, int idPerAutoPase)
        {
            enUsuario u = new enUsuario();
            u = (enUsuario)(Session["usuario"]);
            enPedido p = new enPedido();
            p.cliente_id = idCliente;
            p.usuario_id = u.usu_id;
            p.tipDocumento_id = tipDocumento;
            p.modPago_id = modoPago;
            p.ped_dirEntrega = sucursalCliente;

            p.solPer_monto = total;
            p.personalA_id = idAutoAumento;
            p.aumento_id = idPerAutoAumento;

            p.solPas_monto = total;
            p.personalP_id = idAutoPase;
            p.pase_id = idPerAutoPase;

            List<enCotizacionDetalle> d = new List<enCotizacionDetalle>();
            d = (List<enCotizacionDetalle>)Session["cotizacion"];
            
            p.lstPedido =d;
            enAlerta a = new enAlerta();
            a = neModoPago.spInsertaPedidoXML(p);
            var jsonSerialiser = new JavaScriptSerializer();
            var json = jsonSerialiser.Serialize(a);
            return json;
        }

    }
}
